你创建的AOP代理,可以通过org.springframework.aop.framework.Advised接口操作。任何AOP代理都可以被转型成这个接口,不管它实现了其他哪些接口。这个接口有下列的方法:

Advisor[] getAdvisors();

void addAdvice(Advice advice) throws AopConfigException;

void addAdvice(int pos, Advice advice) throws AopConfigException;

void addAdvisor(Advisor advisor) throws AopConfigException;

void addAdvisor(int pos, Advisor advisor) throws AopConfigException;

int indexOf(Advisor advisor);

boolean removeAdvisor(Advisor advisor) throws AopConfigException;

void removeAdvisor(int index) throws AopConfigException;

boolean replaceAdvisor(Advisor a, Advisor b) throws AopConfigException;

boolean isFrozen();

getAdvisors()方法返回已经添加到工厂的所有advisor,interceptor和其他通知类型。如果你添加了一个advisor,那么在返回的数组上你所添加的次序的位置上,正是你添加的advisor。如果你添加了一个拦截器或是其他类型的通知,Spring会把它包装成一个切点永远为true的advisor。因此,如果你添加了一个MethodInterceptor,那么在返回的数组中,你所添加的位置上,会是一个默认的DefaultPointcutAdvisor,包含了你的MethodInterceptor和一个匹配所有类和方法的切点。
addAdvisor()方法用来添加任何Advisor。通常用DefaultPointcutAdvisor保存通知和切点,它可以和任意的通知和切点一起使用(除了introductions)。
默认的,在代理被创建完成后还可以添加或是移除advisor和interceptor。唯一的限制是无法添加或移除introduction advisor,因为已经在工厂中存在的代理无法应用接口的改变。(你可以从工厂中获取一个新的代理来便面这个问题。)
这个简单的例子将AOP代理转成了Advised接口,并测试和操作它的通知:

Advised advised = (Advised) myObject;
Advisor[] advisors = advised.getAdvisors();
int oldAdvisorCount = advisors.length;
System.out.println(oldAdvisorCount + " advisors");

// Add an advice like an interceptor without a pointcut
// Will match all proxied methods
// Can use for interceptors, before, after returning or throws advice
advised.addAdvice(new DebugInterceptor());

// Add selective advice using a pointcut
advised.addAdvisor(new DefaultPointcutAdvisor(mySpecialPointcut, myAdvice));

assertEquals("Added two advisors", oldAdvisorCount + 2, advised.getAdvisors().length);

很明显,在业务对象的生产环境中修改通知是否可取是存在疑问的。但是,在开发环境中这会很有用:比如,在测试中。有时,我发现能够通过interceptor或是其他通知的方式添加测试代码,进入到我想测试的方法调用中去,是很有用的。(例如:通知可以进入到为一些方法创建的事务中去:比如在事务回滚前,运行SQL来检查数据库是够被正确更新。)
你可以使用frozen标志,这会让AdvisedisFrozen()方法返回true,这会让代理在尝试被添加或移除通知时引起AopConfigException。在某些情况下冻结Advised对象的状态是有用的,比如,防止调用代理移除安全性拦截器。它也在Spring 1.1中被用来在运行时,通知不需要被修改的情况下允许优化。